Peer-to-peer (P2P) applications exchange large amounts of data and generate significant amounts of network traffic. P2P applications leverage multiple copies of data content populated to multiple different network nodes to allow a requesting agent to obtain portions of the data content from one or more of many possible data sources. Such P2P distributed applications improve application performance and scalability and are frequently used for file sharing, real-time communication, and on-demand media streaming.
Many P2P applications operate by implementing an application layer overlay network over the communication network. The overlay network is a logical network of participating network nodes (peers) directly interconnected via overlay links that are each abstractions of one or underlying transport links of the communication network. The overlay network include data structures that index one or more network devices (or “resources”) that store and source specific data content, such as files or file portions. A peer seeking particular data content queries the data structures to obtain a list of identities of network devices that source the file. The peer (here operating as a client) randomly selects one of the devices from the list from which to request and receive the data content via the overlay network.
Client software for P2P applications often select resources naively, that is, without incorporating network topology information or related details. Rather, clients rely on heuristics to approximate such information. As a result, network data traffic exchanged using these applications may congest network links, cross service provider network boundaries multiple times, and generally transit the communication network in a manner that is suboptimal from a user-standpoint and undesirable from the point of view of the service provider. For instance, while two peers may be members of the same service provider network, an overlay link connecting the peers may nevertheless traverse multiple network boundaries, which unnecessarily increases the inter-peer transit costs to the service provider. Furthermore, although distributed applications capitalize on excess bandwidth at the data sources to improve throughput and reduce latencies for end-users while also reducing the burden of content providers to provision application servers, the ability to cheaply distribute data content comes at the expense of service providers, which bear the cost of inefficiently transporting network data.
Recently, an Application-Layer Traffic Optimization (ALTO) service has been proposed in which an ALTO protocol is used to provide guidance to P2P applications regarding selection of a resource from which to obtain data content. In one example, a service provider provisions an ALTO server for a service provider network with network topology and topology link cost information. P2P clients send ALTO requests to the ALTO server to obtain a network map and a corresponding cost map. The network map specifies a subset of network topological groupings defined by the ALTO server for the network. A cost map for the network map defines provider preferences respecting inter-group routing costs for connections among the various groups of the network map. As a result, service providers provisioning the ALTO server may direct P2P clients to select resources according to service provider preferences, which may include optimizing throughput and/or user experience, for instance, reducing costs to the service provider, or promoting other provider objectives. The ALTO service and ALTO protocol is described in further detail in J. Seedorf et al., RFC 5693, “Application-Layer Traffic Optimization (ALTO) Problem Statement,” Network Working Group, the Internet Engineering Task Force draft, October 2009; and R. Alimi et al., “ALTO Protocol: draft-ietf-alto-protocol-06.txt,” ALTO Working Group, the Internet Engineering Task Force draft, October 2010, each of which is incorporated herein by reference in its entirety.